package com.ynet.middleground.contract.utils;

import java.util.Arrays;
import java.util.Optional;
import java.util.function.Predicate;

import com.ynet.core.exception.BusinessException;

/**
 * @author liulx
 * @description 枚举工具
 * @date 2019-11-11 13:04
 */
public class EnumUtil {

    /**
     * 根据条件获取枚举对象
     *
     * @param className 枚举类
     * @param predicate 筛选条件
     * @param <T>
     * @return
     */
    public static <T> Optional<T> getEnumObject(Class<T> className, Predicate<T> predicate) {
        if (className.isEnum()) {
            T[] ts = className.getEnumConstants();
            return Arrays.stream(ts).filter(predicate).findAny();
        }
        return Optional.empty();
    }

    /**
     * 根据条件获取枚举对象
     *
     * @param className 枚举类
     * @param predicate 筛选条件
     * @param errMsg 错误提示内容
     * @param errCode 错误码
     * @param <T>
     * @return
     */
    public static <T> T getEnumObject(Class<T> className, Predicate<T> predicate, String errMsg, String errCode) {
        if (className.isEnum()) {
            T[] ts = className.getEnumConstants();
            return Arrays.stream(ts).filter(predicate).findAny()
                .orElseThrow(() -> new BusinessException(errMsg, errCode));
        }
        throw new BusinessException(errMsg, errCode);
    }

}
